package com.cy.pj.ajax.controller;

import org.springframework.web.bind.annotation.*;

import java.util.*;

@RestController
public class AjaxController {

    private List<Map<String, Object>> dblist = new ArrayList<>();
    public AjaxController(){
        Map<String, Object> map = new HashMap<>();
        map.put("id", "100");
        map.put("name", "电子设备");
        map.put("parentId",null);   //没有该id表示一级分类
        map.put("remark", "使用年限");
        map.put("createdTime", new Date());
        dblist.add(map);
    }

    @RequestMapping("/doAjaxGet")
    public List<Map<String, Object>> doAjaxGet(){
        return dblist;//返回所有
    }

    @RequestMapping("/doAjaxPost")
//   map一般用来作为响应参数使用, 使用@RequestParam表明作为请求参数使用
    public String  doAjaxPost(@RequestBody Map<String, Object> map){
        map.put("createdTime", new Date());
        dblist.add(map);
        return "save success";
    }

    @DeleteMapping("/doAjaxDelete")
//    接收数据的时候使用的是Map类型, 不能指定类型, 因此全部都是String类型,
//    所以使用Integer类型的参数比较时, 不能找到匹配的结果, 所以需要将类型转换为字符串
    public String doAjaxDelete(String id){
        String s = "Delete False";
    /*for(Map m : dblist){
                if(m.get(id).equals(id)){
    //            if(m.containsKey(id)){需要比较的次数太多, 不使用
                    dblist.remove(m);
                    s = "Delete Success";
            System.err.println("shaqingkuang");
                    break;
                }
            }*/
        System.err.println(id);
        Iterator it = dblist.iterator();
        while (it.hasNext()) {
            Map<String, Object> map = (Map<String, Object>)it.next();
            if(map.get("id").equals(id)){
//                直接用list移除数据, 线程不安全, 需要使用迭代器来移除
//                dblist.remove(map);   arraylist线程不安全, 可能出现迭代异常
                it.remove();    //通过迭代器删除
                s = "Delete Success";
            }
        }
        return s;
    }

    @PutMapping("/doAjaxUpdate")
    public String doAjaxUpdate(@RequestParam Map<String, Object> updateMap){
        Iterator it = dblist.iterator();
        while (it.hasNext()){
            Map<String, Object> map = (Map<String, Object>)it.next();
            if(map.get("id").equals(updateMap.get("id"))){
                map.put("name",updateMap.get("name"));
                map.put("remark",updateMap.get("remark"));
            }
        }
        return "Update OK";
    }



    @CrossOrigin        //该注解表明了该方法可以进行跨域访问
    @GetMapping("/doAjaxGet01")
    public String doAjaxGet01(){
    return "{\"name\":\"电子设备\",\"createdTime\":\"2020-11-10T06:21:37.976+00:00\",\"remark\":\"使用年限\",\"id\":100,\"parentId\":null}";
    }
}
